package test

import modelo.Curso
import modelo.ResultadoCursada
import modelo.Estudiante
import org.junit.Assert._
import org.junit.Test
import org.junit.Before
import org.scalatest.junit.AssertionsForJUnit
import modelo.Materia

class TestEstudiante extends AssertionsForJUnit {
  
  var estudiante : Estudiante = _
  var materia : Materia = _
  
  @Before def testInitialize {
    estudiante = new Estudiante("Estudiante1")
    materia = new Materia("POO3")
    // Agregue Materia para que no rompiera cuando se instancia un curso
 		var curso1 = new Curso(materia,null,null)
 		var curso2 = new Curso(materia,null,null)
 		var curso3 = new Curso(materia,null,null)
        var curso4 = new Curso(materia,null,null)
        curso1.mapEstudianteResultado.put(estudiante, new ResultadoCursada(false,0,curso1))
 		curso2.mapEstudianteResultado.put(estudiante, new ResultadoCursada(true,3,curso2))
 		curso3.mapEstudianteResultado.put(estudiante, new ResultadoCursada(true,8,curso3))
 		curso4.mapEstudianteResultado.put(estudiante, new ResultadoCursada(true,10,curso4))
 		estudiante.cursos = List(curso1,curso2,curso3,curso4)
  }
  
  @Test def testPromedios {
  	
    assert(estudiante.promedioConAplazos == 7)
  	assert(estudiante.promedioSinAplazos == 9)
  }
  
  @Test def testPocentajes {
  	assert(estudiante.porcentajeDeAprobadosSobreIniciados == 50)
  }
  
  @Test def testCantidades {
  	assert(estudiante.cantidadDeCursadasAprobadas == 2)
  	assert(estudiante.cantidadDeCursadasAbandonadas == 1)
  }
  
  @Test def testTablaDeNotas {
  	assert(estudiante.tablaDeNotas.size == 3)
  	assert(estudiante.tablaDeNotas.get(3) == Some(1))
  	assert(estudiante.tablaDeNotas.get(8) == Some(1))
  	assert(estudiante.tablaDeNotas.get(10) == Some(1))

  }
  
  @Test def testMaximaNotaAlcanzadaMinNVeces {
    assertEquals(estudiante.maximaNotaAlcanzadaMinNVeces(1),10)
    assertEquals(estudiante.maximaNotaAlcanzadaMinNVeces(2),8)
    assertEquals(estudiante.maximaNotaAlcanzadaMinNVeces(3),3)
  }

}
